import { Question } from '@/types';

// 用户画像问卷数据
export const profileQuestions: Question[] = [
  {
    id: 'q1',
    title: '您的主要技术角色是什么？',
    description: '请选择最符合您当前工作情况的角色',
    type: 'single_choice',
    required: true,
    weight: 0.3,
    options: [
      {
        id: 'q1-opt1',
        label: '开发工程师',
        value: 'developer',
        description: '前端、后端、全栈开发工程师'
      },
      {
        id: 'q1-opt2',
        label: '架构师',
        value: 'architect',
        description: '系统架构师、技术架构师、解决方案架构师'
      },
      {
        id: 'q1-opt3',
        label: '产品经理',
        value: 'product_manager',
        description: '产品策划、需求分析、产品设计'
      },
      {
        id: 'q1-opt4',
        label: '设计师',
        value: 'designer',
        description: 'UI/UX设计师、交互设计师、视觉设计师'
      },
      {
        id: 'q1-opt5',
        label: '业务分析师',
        value: 'business_analyst',
        description: '商业分析、数据分析、咨询顾问'
      },
      {
        id: 'q1-opt6',
        label: '学生',
        value: 'student',
        description: '在校学生、研究生、实习生'
      },
      {
        id: 'q1-opt7',
        label: '其他',
        value: 'other',
        description: '技术管理者、CTO、创业者等'
      }
    ]
  },
  {
    id: 'q2',
    title: '您最关注哪些技术领域？',
    description: '可选择多个感兴趣的技术方向（最多选择5个）',
    type: 'multiple_choice',
    required: true,
    weight: 0.25,
    options: [
      {
        id: 'q2-opt1',
        label: '人工智能/机器学习',
        value: 'ai_ml',
        description: 'AI算法、深度学习、NLP、计算机视觉'
      },
      {
        id: 'q2-opt2',
        label: '云计算',
        value: 'cloud_computing',
        description: 'AWS、阿里云、腾讯云、私有云、混合云'
      },
      {
        id: 'q2-opt3',
        label: '大数据',
        value: 'big_data',
        description: '数据处理、数据分析、Hadoop、Spark'
      },
      {
        id: 'q2-opt4',
        label: '物联网',
        value: 'iot',
        description: '智能硬件、传感器、边缘计算'
      },
      {
        id: 'q2-opt5',
        label: '网络安全',
        value: 'security',
        description: '信息安全、网络安全、数据安全、隐私保护'
      },
      {
        id: 'q2-opt6',
        label: 'DevOps',
        value: 'devops',
        description: 'CI/CD、容器化、自动化运维、监控'
      },
      {
        id: 'q2-opt7',
        label: '前端开发',
        value: 'frontend',
        description: 'React、Vue、Angular、移动端开发'
      },
      {
        id: 'q2-opt8',
        label: '后端开发',
        value: 'backend',
        description: 'Java、Python、Go、Node.js、.NET'
      },
      {
        id: 'q2-opt9',
        label: '移动开发',
        value: 'mobile',
        description: 'iOS、Android、React Native、Flutter'
      },
      {
        id: 'q2-opt10',
        label: '区块链',
        value: 'blockchain',
        description: '比特币、以太坊、智能合约、DeFi'
      },
      {
        id: 'q2-opt11',
        label: '数据库',
        value: 'databases',
        description: 'MySQL、PostgreSQL、MongoDB、Redis'
      },
      {
        id: 'q2-opt12',
        label: '微服务',
        value: 'microservices',
        description: '服务拆分、API设计、分布式系统'
      }
    ]
  },
  {
    id: 'q3',
    title: '您的技术经验水平如何？',
    description: '请根据您的实际工作经验和技术能力选择',
    type: 'single_choice',
    required: true,
    weight: 0.2,
    options: [
      {
        id: 'q3-opt1',
        label: '初级（0-2年）',
        value: 'beginner',
        description: '刚入行或经验较少，希望学习基础知识'
      },
      {
        id: 'q3-opt2',
        label: '中级（2-5年）',
        value: 'intermediate',
        description: '有一定项目经验，希望深入技术细节'
      },
      {
        id: 'q3-opt3',
        label: '高级（5-8年）',
        value: 'advanced',
        description: '技术能力较强，关注架构设计和技术前沿'
      },
      {
        id: 'q3-opt4',
        label: '专家级（8年以上）',
        value: 'expert',
        description: '技术专家，关注行业趋势和技术创新'
      }
    ]
  },
  {
    id: 'q4',
    title: '此次参会的主要目的是什么？',
    description: '可选择多个参会目标',
    type: 'multiple_choice',
    required: true,
    weight: 0.15,
    options: [
      {
        id: 'q4-opt1',
        label: '学习新技术',
        value: 'learning',
        description: '了解最新技术趋势，提升技术能力'
      },
      {
        id: 'q4-opt2',
        label: '技术交流',
        value: 'networking',
        description: '与同行交流经验，建立技术人脉'
      },
      {
        id: 'q4-opt3',
        label: '商务合作',
        value: 'business',
        description: '寻找合作伙伴，拓展商业机会'
      },
      {
        id: 'q4-opt4',
        label: '人才招聘',
        value: 'recruitment',
        description: '寻找优秀人才，建立招聘渠道'
      },
      {
        id: 'q4-opt5',
        label: '产品调研',
        value: 'product_research',
        description: '了解市场产品，获取竞品信息'
      },
      {
        id: 'q4-opt6',
        label: '技术评估',
        value: 'technology_evaluation',
        description: '评估新技术的可行性和应用价值'
      }
    ]
  },
  {
    id: 'q5',
    title: '您偏好的会议时间段是？',
    description: '选择您精力最集中、最适合学习的时间段',
    type: 'multiple_choice',
    required: true,
    weight: 0.1,
    options: [
      {
        id: 'q5-opt1',
        label: '上午（9:00-12:00）',
        value: 'morning',
        description: '头脑清醒，适合学习理论知识'
      },
      {
        id: 'q5-opt2',
        label: '下午（14:00-17:00）',
        value: 'afternoon',
        description: '适中状态，适合实践操作'
      },

      {
        id: 'q5-opt3',
        label: '全天候',
        value: 'full_day',
        description: '时间灵活，可参加全天活动'
      }
    ]
  }
];

// 问题权重配置
export const questionWeights = {
  role: 0.3,          // 技术角色权重
  techPreferences: 0.25,  // 技术偏好权重
  experienceLevel: 0.2,   // 经验水平权重
  attendancePurpose: 0.15, // 参会目的权重
  timePreferences: 0.1     // 时间偏好权重
};

// 验证答案的辅助函数
export const validateAnswer = (question: Question, answer: string | string[]): boolean => {
  if (question.required && (!answer || (Array.isArray(answer) && answer.length === 0))) {
    return false;
  }

  if (question.type === 'single_choice') {
    return typeof answer === 'string' && 
           question.options?.some(opt => opt.value === answer) || false;
  }

  if (question.type === 'multiple_choice') {
    if (!Array.isArray(answer)) return false;
    
    // 检查所有选项是否有效
    const validOptions = question.options?.map(opt => opt.value) || [];
    const allValid = answer.every(val => validOptions.includes(val));
    
    // 技术偏好问题限制最多选择5个
    if (question.id === 'q2') {
      return allValid && answer.length <= 5;
    }
    
    return allValid;
  }

  if (question.type === 'text') {
    return typeof answer === 'string' && answer.trim().length > 0;
  }

  if (question.type === 'rating') {
    const rating = Number(answer);
    return !isNaN(rating) && rating >= 1 && rating <= 5;
  }

  return false;
};

// 获取问题的总进度
export const getQuestionProgress = (answers: Record<string, string | string[]>): number => {
  const totalQuestions = profileQuestions.length;
  const answeredQuestions = Object.keys(answers).filter(questionId => {
    const question = profileQuestions.find(q => q.id === questionId);
    return question && validateAnswer(question, answers[questionId]);
  }).length;
  
  return Math.round((answeredQuestions / totalQuestions) * 100);
};

// 检查问卷是否完成
export const isProfileComplete = (answers: Record<string, string | string[]>): boolean => {
  return profileQuestions.every(question => {
    const answer = answers[question.id];
    return validateAnswer(question, answer);
  });
};